package com.example.smartpark.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.smartpark.common.Result;
import com.example.smartpark.dto.UserDTO;
import com.example.smartpark.dto.UserQueryDTO;
import com.example.smartpark.service.UserAdminService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 用户管理控制器
 */
@Slf4j
@RestController
@RequestMapping("/api/admin/users")
public class UserAdminController {

    @Autowired
    private UserAdminService userAdminService;

    /**
     * 获取用户列表
     *
     * @param queryDTO 查询条件
     * @return 用户列表
     */
    @GetMapping
    public Result<IPage<UserDTO>> getUserList(UserQueryDTO queryDTO) {
        log.info("获取用户列表: {}", queryDTO);
        IPage<UserDTO> userPage = userAdminService.getUserPage(queryDTO);
        return Result.success(userPage);
    }

    /**
     * 获取用户详情
     *
     * @param id 用户ID
     * @return 用户详情
     */
    @GetMapping("/{id}")
    public Result<UserDTO> getUserDetail(@PathVariable Integer id) {
        log.info("获取用户详情: {}", id);
        UserDTO userDTO = userAdminService.getUserById(id);
        return Result.success(userDTO);
    }

    /**
     * 创建用户
     *
     * @param userDTO 用户信息
     * @return 创建结果
     */
    @PostMapping
    public Result<UserDTO> createUser(@RequestBody @Valid UserDTO userDTO) {
        log.info("创建用户: {}", userDTO);
        UserDTO createdUser = userAdminService.createUser(userDTO);
        return Result.success(createdUser);
    }

    /**
     * 更新用户
     *
     * @param id 用户ID
     * @param userDTO 用户信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public Result<UserDTO> updateUser(@PathVariable Integer id, @RequestBody @Valid UserDTO userDTO) {
        log.info("更新用户: id={}, data={}", id, userDTO);
        UserDTO updatedUser = userAdminService.updateUser(id, userDTO);
        return Result.success(updatedUser);
    }

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteUser(@PathVariable Integer id) {
        log.info("删除用户: {}", id);
        boolean result = userAdminService.deleteUser(id);
        return Result.success(result);
    }

    /**
     * 更新用户状态
     *
     * @param id 用户ID
     * @param status 状态值
     * @return 更新结果
     */
    @PutMapping("/{id}/status/{status}")
    public Result<UserDTO> updateUserStatus(@PathVariable Integer id, @PathVariable Integer status) {
        log.info("更新用户状态: id={}, status={}", id, status);
        UserDTO updatedUser = userAdminService.changeUserStatus(id, status);
        return Result.success(updatedUser);
    }

    /**
     * 重置用户密码
     *
     * @param id 用户ID
     * @return 重置结果
     */
    @PutMapping("/{id}/reset-password")
    public Result<Boolean> resetUserPassword(@PathVariable Integer id) {
        log.info("重置用户密码: {}", id);
        boolean result = userAdminService.resetUserPassword(id);
        return Result.success(result);
    }
}
